home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 11 / CU Amiga Magazine's Super CD-ROM 11 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-06].iso / cucd / programming / oberonv4 / source / system / amigamath.mod (.txt) < prev    next >
Oberon Text  |  1996-06-02  |  5KB  |  162 lines

  1. Syntax20b.Scn.Fnt
  2. ParcElems
  3. Alloc
  4. Syntax24b.Scn.Fnt
  5. Syntax10.Scn.Fnt
  6. Syntax10b.Scn.Fnt
  7. FoldElems
  8. (* AMIGA *)
  9. MODULE AmigaMath; (* RD 6.8.1995, updated OJ 30 Apr 96 *)
  10. IMPORT
  11.     SYSTEM, E:=AmigaExec;
  12.     mathSBBase-, mathSTBase- : E.LibraryPtr;
  13.     mathSBVersion-, mathSTVersion- : INTEGER;
  14.     termEntry : E.TermEntry;
  15. CONST
  16.     mathSBName*="mathieeesingbas.library";
  17.     mathSTName*="mathieeesingtrans.library";
  18. PROCEDURE -ReturnD0    04EH,05EH,  04EH,075H;
  19. PROCEDURE Entier*(s: REAL): LONGINT;
  20. BEGIN
  21.     SYSTEM.PUTREG( 0, s );
  22.     SYSTEM.CALL( -90, mathSBBase );
  23.     SYSTEM.CALL( -30, mathSBBase );
  24.     ReturnD0
  25. END Entier;
  26. PROCEDURE IntToReal*(l: LONGINT; VAR d: REAL);
  27. BEGIN
  28.     SYSTEM.PUTREG( 0, l );
  29.     SYSTEM.CALL( -36, mathSBBase );
  30.     SYSTEM.GETREG( 0, d )
  31. END IntToReal;
  32. PROCEDURE Cmp*(s1, s2: REAL): LONGINT;
  33. (* 1 if s1>s2     0 if s1=s2       -1 if s1<s2 *) 
  34. BEGIN
  35.     SYSTEM.PUTREG( 0, s1 );
  36.     SYSTEM.PUTREG( 1, s2 );
  37.     SYSTEM.CALL( -42, mathSBBase );
  38.     ReturnD0
  39. END Cmp;
  40. PROCEDURE Tst*(s: REAL): LONGINT;
  41. (* 1 if s>0     0 if s=0       -1 if s<0 *) 
  42. BEGIN
  43.     SYSTEM.PUTREG( 0, s );
  44.     SYSTEM.CALL( -48, mathSBBase );
  45.     ReturnD0
  46. END Tst;
  47. PROCEDURE Abs*(s: REAL; VAR d: REAL);
  48. BEGIN
  49.     SYSTEM.PUTREG( 0, s );
  50.     SYSTEM.CALL( -54, mathSBBase );
  51.     SYSTEM.GETREG( 0, d )
  52. END Abs;
  53. PROCEDURE Neg*(s: REAL; VAR d: REAL);
  54. BEGIN
  55.     SYSTEM.PUTREG( 0, s );
  56.     SYSTEM.CALL( -60, mathSBBase );
  57.     SYSTEM.GETREG( 0, d )
  58. END Neg;
  59. PROCEDURE Add*(s1, s2: REAL; VAR d: REAL);
  60. BEGIN
  61.     SYSTEM.PUTREG( 0, s1 );
  62.     SYSTEM.PUTREG( 1, s2 );
  63.     SYSTEM.CALL( -66, mathSBBase );
  64.     SYSTEM.GETREG( 0, d )
  65. END Add;
  66. PROCEDURE Sub*(s1, s2: REAL; VAR d: REAL);
  67. BEGIN
  68.     SYSTEM.PUTREG( 0, s1 );
  69.     SYSTEM.PUTREG( 1, s2 );
  70.     SYSTEM.CALL( -72, mathSBBase );
  71.     SYSTEM.GETREG( 0, d )
  72. END Sub;
  73. PROCEDURE Mul*(s1, s2: REAL; VAR d: REAL);
  74. BEGIN
  75.     SYSTEM.PUTREG( 0, s1 );
  76.     SYSTEM.PUTREG( 1, s2 );
  77.     SYSTEM.CALL( -78, mathSBBase );
  78.     SYSTEM.GETREG( 0, d )
  79. END Mul;
  80. PROCEDURE Div*(s1, s2: REAL; VAR d: REAL);
  81. BEGIN
  82.     SYSTEM.PUTREG( 0, s1 );
  83.     SYSTEM.PUTREG( 1, s2 );
  84.     SYSTEM.CALL( -84, mathSBBase );
  85.     SYSTEM.GETREG( 0, d )
  86. END Div;
  87. (*---------------------------------------------------*)
  88. PROCEDURE Arctan*(s: REAL; VAR d: REAL);
  89. BEGIN
  90.     SYSTEM.PUTREG( 0, s );
  91.     SYSTEM.CALL( -30, mathSTBase );
  92.     SYSTEM.GETREG( 0, d )
  93. END Arctan;
  94. PROCEDURE Cos*(s: REAL; VAR d: REAL);
  95. BEGIN
  96.     SYSTEM.PUTREG( 0, s );
  97.     SYSTEM.CALL( -42, mathSTBase );
  98.     SYSTEM.GETREG( 0, d )
  99. END Cos;
  100. PROCEDURE Sin*(s: REAL; VAR d: REAL);
  101. BEGIN
  102.     SYSTEM.PUTREG( 0, s );
  103.     SYSTEM.CALL( -36, mathSTBase );
  104.     SYSTEM.GETREG( 0, d )
  105. END Sin;
  106. PROCEDURE Ln*(s: REAL; VAR d: REAL);
  107. BEGIN
  108.     SYSTEM.PUTREG( 0, s );
  109.     SYSTEM.CALL( -84, mathSTBase );
  110.     SYSTEM.GETREG( 0, d )
  111. END Ln;
  112. PROCEDURE Exp*(s: REAL; VAR d: REAL);
  113. BEGIN
  114.     SYSTEM.PUTREG( 0, s );
  115.     SYSTEM.CALL( -78, mathSTBase );
  116.     SYSTEM.GETREG( 0, d )
  117. END Exp;
  118. PROCEDURE Sqrt*(s: REAL; VAR d: REAL);
  119. BEGIN
  120.     SYSTEM.PUTREG( 0, s );
  121.     SYSTEM.CALL( -96, mathSTBase );
  122.     SYSTEM.GETREG( 0, d )
  123. END Sqrt;
  124. PROCEDURE Ratio*(s1, s2: LONGINT; VAR d: REAL);
  125. (* returns s1/s2 *) 
  126.     VAR r1,r2: REAL;
  127. BEGIN
  128.     IntToReal(s1, r1);
  129.     IntToReal(s2,r2);
  130.     Div(r1,r2,d)
  131. END Ratio;
  132. PROCEDURE e*(VAR d: REAL);
  133. BEGIN
  134.     d:=SYSTEM.VAL(REAL, 0402DF854H)
  135. END e;
  136. PROCEDURE pi*(VAR d: REAL);
  137. BEGIN
  138.     d:=SYSTEM.VAL(REAL, 040490FDBH)
  139. END pi;
  140. PROCEDURE Init;
  141. TYPE LibraryPtr=POINTER TO E.Library;
  142. VAR lib:LibraryPtr;
  143. BEGIN
  144.     mathSBBase:=E.OpenLibrary(mathSBName,37);
  145.     IF mathSBBase=0 THEN HALT(99) END;
  146.     lib:=SYSTEM.VAL(LibraryPtr,mathSBBase);
  147.     mathSBVersion:=lib.version;
  148.     mathSTBase:=E.OpenLibrary(mathSTName,37);
  149.     IF mathSTBase=0 THEN HALT(99) END;
  150.     lib:=SYSTEM.VAL(LibraryPtr,mathSTBase);
  151.     mathSTVersion:=lib.version
  152. END Init;
  153. PROCEDURE Term;
  154. BEGIN
  155.     E.CloseLibrary( mathSTBase );
  156.     E.CloseLibrary( mathSBBase )
  157. END Term;
  158. BEGIN
  159.     Init;
  160.     E.Register(termEntry, Term);
  161. END AmigaMath.
  162.